let layerIndex;

layui.use(['form', 'table'], function () {
    const form = layui.form;
    const table = layui.table;

    // 表格渲染
    table.render({
        elem: '#tbstudent',
        id: 'tbstudent',
        url: '/api/student/getbypage',
        method: 'POST',
        contentType: 'application/json',
        page: true,
        request: {
            pageName: 'pageIndex', // 与后端 QueryObj.pageIndex 对应
            limitName: 'pageSize'  // 与后端 QueryObj.pageSize 对应
        },
        where: getSearchCondition(),
        cols: [[
            { type: 'checkbox', fixed: 'left' },
            { field: 'id', title: 'ID', width: 80, fixed: 'left', sort: true },
            { field: 'name', title: '姓名' },
            { field: 'sno', title: '学号', width: 150 },
            {
                field: 'sex', title: '性别', width: 80, sort: true,
                templet: d => d.sex === 1 ? '男' : (d.sex === 2 ? '女' : '未知')
            },
            { field: 'age', title: '年龄', width: 100, sort: true },
            { fixed: 'right', title: '操作', width: 134, templet: '#editTemplate' }
        ]],
        parseData: function (res) {
            // 适配后端返回数据格式，符合LayUI要求
            return {
                "code": res.code,    // 一般0表示成功
                "msg": res.msg,
                "count": res.count,  // 总条数
                "data": res.data     // 当前页数据数组
            };
        },
        done: function (res, curr, count) {
            console.log("表格加载完成，当前页：" + curr + "，总条数：" + count);
        }
    });

    // 监听工具栏操作（编辑按钮）
    table.on('tool(tbstudent)', function (obj) {
        if (obj.event === 'edit') {
            showStudentDlg(obj.data.id);
        }
    });

    // 监听排序事件
    table.on('sort(tbstudent)', function (obj) {
        table.reload('tbstudent', {
            initSort: obj, // 记录初始排序状态
            where: Object.assign({}, getSearchCondition(), {
                sortField: obj.field,
                sortOrder: obj.type
            }),
            page: { curr: 1 } // 排序后回到第一页
        });
    });

    // 表单提交（新增/更新）
    form.on('submit(studentFormFilter)', function () {
        const id = $("#studentForm input[name='id']").val();
        if (id) {
            commitUpdateStudent();
        } else {
            commitAddStudent();
        }
        return false;
    });
});

// 获取搜索条件对象
function getSearchCondition() {
    const formData = {};
    $("#queryForm").find("input, select").each(function () {
        const name = $(this).attr("name");
        const value = $(this).val();
        if (name && value) {
            formData[name] = value;
        }
    });
    return { data: formData }; // 以data字段包裹，符合后端接口
}

// 搜索按钮调用，刷新表格并带查询条件，回到第一页
function search() {
    layui.table.reload('tbstudent', {
        where: getSearchCondition(),
        page: { curr: 1 }
    });
}

// 刷新表格，保留当前查询条件和分页
function refreshStudentList() {
    layui.table.reload('tbstudent', {
        where: getSearchCondition()
    });
}

// 显示新增/编辑弹窗
function showStudentDlg(id) {
    layerIndex = layer.open({
        type: 1,
        title: id ? '编辑学生信息' : '新增学生信息',
        area: ['500px', '400px'],
        content: $('#studentForm'),
        success: function () {
            $('#studentForm')[0].reset();
            if (id) {
                $.get(`/api/student/id/${id}`, function (res) {
                    layui.form.val("studentFormFilter", res.data);
                    layui.form.render();
                });
            }
        }
    });
}

// 提交新增
function commitAddStudent() {
    const formData = JSON.stringify($("#studentForm").serializeObject());

    $.ajax({
        url: "/api/student/add",
        method: "POST",
        contentType: "application/json",
        data: formData
    }).done(result => {
        if (result.code === 0) {
            layer.close(layerIndex);
            refreshStudentList();
            layer.msg("新增成功！");
        } else {
            alert(result.msg || "新增失败！");
        }
    }).fail(() => {
        alert("新增失败，请检查服务器连接！");
    });
}

// 提交更新
function commitUpdateStudent() {
    const formData = JSON.stringify($("#studentForm").serializeObject());

    $.ajax({
        url: "/api/student/update",
        method: "PUT",
        contentType: "application/json",
        data: formData
    }).done(result => {
        if (result.code === 0) {
            layer.close(layerIndex);
            refreshStudentList();
            layer.msg("更新成功！");
        } else {
            alert(result.msg || "更新失败！");
        }
    }).fail(() => {
        alert("更新失败，请检查服务器连接！");
    });
}

// jQuery 序列化表单为对象（可空值）
$.fn.serializeObject = function () {
    const obj = {};
    this.serializeArray().forEach(item => {
        obj[item.name] = item.value || null;
    });
    return obj;
};

// 删除单条
function deleteById(id) {
    layer.confirm('确定删除吗？', { btn: ['确定', '取消'] }, function () {
        $.ajax({
            url: "/api/student/delete/" + id,
            method: "DELETE"
        }).done(() => {
            refreshStudentList();
        }).fail(() => {
            alert("删除失败，请检查服务器！");
        });
        layer.closeAll();
    });
}

// 批量删除
function deleteConfirm() {
    const checkStatus = layui.table.checkStatus('tbstudent');
    const ids = checkStatus.data.map(item => item.id);
    if (ids.length === 0) {
        layer.msg("请先选择要删除的学生！");
        return;
    }

    layer.confirm('确定批量删除选中项？', { btn: ['确定', '取消'] }, function () {
        $.ajax({
            url: "/api/student/deletebatch",
            method: "POST",
            contentType: "application/json",
            data: JSON.stringify(ids)
        }).done(result => {
            if (result.code === 0) {
                layer.msg("删除成功！");
                refreshStudentList();
            } else {
                alert(result.msg || "批量删除失败！");
            }
        }).fail(() => {
            alert("批量删除失败！");
        });
        layer.closeAll();
    });
}
